/*

给定一个二进制数组，你可以最多将 1 个 0 翻转为 1，找出其中最大连续 1 的个数。

示例 1：

输入：[1,0,1,1,0]
输出：4
解释：翻转第一个 0 可以得到最长的连续 1。
     当翻转以后，最大连续 1 的个数为 4。
 

注：

输入数组只包含 0 和 1.
输入数组的长度为正整数，且不超过 10,000
 

进阶：
如果输入的数字是作为 无限流 逐个输入如何处理？换句话说，内存不能存储下所有从流中输入的数字。您可以有效地解决吗？

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/max-consecutive-ones-ii
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

*/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

class Solution
{
public:
    int findMaxConsecutiveOnes(vector<int> &nums)
    {
        int last = 0;
        int cur = 0;
        int Max = 0;
        for (int i = 0; i < nums.size(); i++)
        {
            if (nums[i] == 1)
                cur++;
            else
            {
                Max = max(last + cur + 1, Max);
                last = cur;
                cur = 0;
            }
        }
        return (cur == nums.size()) ? cur : max(last + cur + 1, Max);
    }
};